package br.com.foxinline.manager.utilitario;

import br.com.foxinline.enums.AbastecimentoAgua;
import br.com.foxinline.enums.AlimentacaoDiaria;
import br.com.foxinline.enums.CondicaoPosseMoradia;
import br.com.foxinline.enums.DestinoLixo;
import br.com.foxinline.enums.EscoamentoSanitario;
import br.com.foxinline.enums.GrauParentesco;
import br.com.foxinline.enums.LocalizacaoMoradia;
import br.com.foxinline.enums.Nacionalidade;
import br.com.foxinline.enums.OrientacaoSexual;
import br.com.foxinline.enums.Peso;
import br.com.foxinline.enums.RacaCor;
import br.com.foxinline.enums.RendaFamiliar;
import br.com.foxinline.enums.ResponsavelCrianca;
import br.com.foxinline.enums.RevestimentoExterno;
import br.com.foxinline.enums.Sexo;
import br.com.foxinline.enums.SituacaoConjugal;
import br.com.foxinline.enums.SituacaoMercadoTrabalho;
import br.com.foxinline.enums.SituacaoMoradia;
import br.com.foxinline.enums.TempoSituacaoRua;
import br.com.foxinline.enums.TipoAcessoDomicilio;
import br.com.foxinline.enums.TipoAlimentacao;
import br.com.foxinline.enums.TipoCurso;
import br.com.foxinline.enums.TipoDomicilio;
import br.com.foxinline.enums.TipoLogradouro;
import br.com.foxinline.enums.TipoProfissional;
import br.com.foxinline.enums.TratamentoAgua;
import br.com.foxinline.modelo.AnimalDomicilio;
import br.com.foxinline.modelo.Doenca;
import br.com.foxinline.modelo.DoencaCardiaca;
import br.com.foxinline.modelo.DoencaPulmonar;
import br.com.foxinline.modelo.HigienePessoal;
import br.com.foxinline.modelo.Intercorrencia;
import br.com.foxinline.modelo.MicroArea;
import br.com.foxinline.modelo.OrigemAlimentacao;
import br.com.foxinline.modelo.ProblemaRenal;
import br.com.foxinline.modelo.TipoDeficiencia;
import br.com.foxinline.modelo.Unidade;
import br.com.foxinline.servico.AnimalDomicilioServico;
import br.com.foxinline.servico.DoencaCardiacaServico;
import br.com.foxinline.servico.DoencaPulmonarServico;
import br.com.foxinline.servico.DoencaServico;
import br.com.foxinline.servico.HigienePessoalServico;
import br.com.foxinline.servico.IntercorrenciaServico;
import br.com.foxinline.servico.MicroAreaServico;
import br.com.foxinline.servico.OrigemAlimentacaoServico;
import br.com.foxinline.servico.ProblemaRenalServico;
import br.com.foxinline.servico.TipoDeficienciaServico;
import br.com.foxinline.servico.UnidadeServico;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

/**
 *
 * @author laverson
 */
@ViewScoped
@ManagedBean
public class ManagerUtilitario implements Serializable {

    @EJB
    TipoDeficienciaServico tipoDeficienciaServico;
    @EJB
    ProblemaRenalServico problemaRenalServico;
    @EJB
    OrigemAlimentacaoServico origemAlimentacaoServico;
    @EJB
    HigienePessoalServico higienePessoalServico;
    @EJB
    DoencaPulmonarServico doencaPulmonarServico;
    @EJB
    DoencaCardiacaServico doencaCardiacaServico;
    @EJB
    DoencaServico doencaServico;
    @EJB
    IntercorrenciaServico intercorrenciaServico;
    @EJB
    UnidadeServico unidadeServico;
    @EJB
    MicroAreaServico microAreaServico;
    @EJB
    AnimalDomicilioServico animalDomicilioServico;

    @PostConstruct
    public void init() {
    }

    public List<SelectItem> getPeso() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (Peso item : Peso.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getSexo() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (Sexo item : Sexo.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getRacaCor() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (RacaCor item : RacaCor.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getNacionalidade() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (Nacionalidade item : Nacionalidade.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getSituacaoConjugal() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (SituacaoConjugal item : SituacaoConjugal.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getTipoCurso() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (TipoCurso item : TipoCurso.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getSituacaoMercadoTrabalho() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (SituacaoMercadoTrabalho item : SituacaoMercadoTrabalho.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getResponsavelCrianca() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (ResponsavelCrianca item : ResponsavelCrianca.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getOrientacaoSexual() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (OrientacaoSexual item : OrientacaoSexual.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getTipoDeficiencia() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (TipoDeficiencia item : tipoDeficienciaServico.pesquisarTodos()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getTempoSituacaoRua() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (TempoSituacaoRua item : TempoSituacaoRua.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getGrauParentesco() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (GrauParentesco item : GrauParentesco.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getProblemaRenal() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (ProblemaRenal item : problemaRenalServico.pesquisarTodos()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getAlimentacaoDiaria() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (AlimentacaoDiaria item : AlimentacaoDiaria.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getOrigemAlimentacao() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (OrigemAlimentacao item : origemAlimentacaoServico.pesquisarTodos()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getHigienePessoal() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (HigienePessoal item : higienePessoalServico.pesquisarTodos()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getDoencaPulmonar() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (DoencaPulmonar item : doencaPulmonarServico.pesquisarTodos()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getDoencaCardiaca() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (DoencaCardiaca item : doencaCardiacaServico.pesquisarTodos()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getDoencas() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (Doenca item : doencaServico.pesquisarTodos()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getIntercorrencias() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (Intercorrencia item : intercorrenciaServico.pesquisarTodos()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> getTipoAlimentacao() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        for (TipoAlimentacao item : TipoAlimentacao.values()) {
            itens.add(new SelectItem(item, item.getNome()));
        }
        return itens;
    }

    public List<SelectItem> tipoProfissional() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (TipoProfissional tipo : TipoProfissional.values()) {
            items.add(new SelectItem(tipo, tipo.getName()));
        }
        return items;
    }

    public List<SelectItem> nacionalidade() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (Nacionalidade tipo : Nacionalidade.values()) {
            items.add(new SelectItem(tipo, tipo.getNome()));
        }
        return items;
    }

    public List<SelectItem> rendaFamiliar() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (RendaFamiliar item : RendaFamiliar.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }
        return items;
    }

    public List<SelectItem> tipoLogradouro() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (TipoLogradouro item : TipoLogradouro.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }
        return items;
    }

    public List<SelectItem> situacaoMoradia() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (SituacaoMoradia item : SituacaoMoradia.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }
        return items;
    }

    public List<SelectItem> localizacaoMoradia() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (LocalizacaoMoradia item : LocalizacaoMoradia.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }
        return items;
    }

    public List<SelectItem> tipoDomicilio() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (TipoDomicilio item : TipoDomicilio.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }
        return items;
    }

    public List<SelectItem> condicaoPosseMoradia() {
        List<SelectItem> items = new ArrayList<SelectItem>();
        for (CondicaoPosseMoradia item : CondicaoPosseMoradia.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }
        return items;
    }

    public List<SelectItem> revestimentoExterno() {
        List<SelectItem> items = new ArrayList<SelectItem>();

        for (RevestimentoExterno item : RevestimentoExterno.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }

        return items;
    }

    public List<SelectItem> tipoAcessoDomicilio() {
        List<SelectItem> items = new ArrayList<SelectItem>();

        for (TipoAcessoDomicilio item : TipoAcessoDomicilio.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }

        return items;
    }

    public List<SelectItem> abastecimentoAgua() {
        List<SelectItem> items = new ArrayList<SelectItem>();

        for (AbastecimentoAgua item : AbastecimentoAgua.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }

        return items;
    }

    public List<SelectItem> tratamentoAgua() {
        List<SelectItem> items = new ArrayList<SelectItem>();

        for (TratamentoAgua item : TratamentoAgua.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }

        return items;
    }

    public List<SelectItem> escoamentoSanitario() {
        List<SelectItem> items = new ArrayList<SelectItem>();

        for (EscoamentoSanitario item : EscoamentoSanitario.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }

        return items;
    }

    public List<SelectItem> destinoLixo() {
        List<SelectItem> items = new ArrayList<SelectItem>();

        for (DestinoLixo item : DestinoLixo.values()) {
            items.add(new SelectItem(item, item.getNome()));
        }

        return items;
    }

    public List<SelectItem> animalDomicilio() {
        List<SelectItem> items = new ArrayList<SelectItem>();

        for (AnimalDomicilio item : animalDomicilioServico.pesquisarTodos()) {
            items.add(new SelectItem(item, item.getNome()));
        }

        return items;
    }

    public List<SelectItem> getTrimestreGestacao() {
        List<SelectItem> itens = new ArrayList<SelectItem>();

        itens.add(new SelectItem(1, "1º"));
        itens.add(new SelectItem(2, "2º"));
        itens.add(new SelectItem(3, "3º"));

        return itens;
    }

    public List<SelectItem> getSimNao() {
        List<SelectItem> itens = new ArrayList<SelectItem>();
        itens.add(new SelectItem(Boolean.TRUE, "Sim"));
        itens.add(new SelectItem(Boolean.FALSE, "Não"));
        return itens;
    }
    // Autocompletes

    public List<Unidade> autocompleteUnidade(String query) {
        return unidadeServico.autocomplete(query);
    }

    public List<MicroArea> autocompleteMicroArea(String query) {
        return microAreaServico.autocomplete(query);
    }
}
